package com.sojson.entity.po;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.sojson.base.impl.BaseDto;
import com.sojson.enums.core.ECouponStatus;
import com.sojson.util.DateUtil;
import com.sojson.util.id.GUIDUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 用户优惠券Bean
 * 
 * @author liu
 * @date 2021-06-02
 */
@ApiModel("用户优惠券Bean")
public class UserCoupon extends BaseDto {

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    private static final long serialVersionUID = 1622615936106L;

    @ApiModelProperty("子优惠券编号")
    private String no;
    @ApiModelProperty("批次编号")
    private String batchNo;
    @ApiModelProperty("领取活动编号")
    private String activityNo;
    @ApiModelProperty("所属优惠券编号")
    private String couponNo;
    @ApiModelProperty("所属用户编号")
    private String userNo;
    @ApiModelProperty("使用模块编号")
    private String moduleNo;
    @ApiModelProperty("使用店铺编号")
    private String storeNo;
    @ApiModelProperty("使用商品编号")
    private String goodsNo;
    @ApiModelProperty("兑换时间(领取时间)")
    private Date getDate;
    @ApiModelProperty("优惠金额")
    private BigDecimal total;
    @ApiModelProperty("使用时间")
    private Date useDate;
    @ApiModelProperty("状态(1:未兑换(在优惠券池中未领取),2:未使用,3:已使用,4:已冻结(不能使用,可解冻),5:已收回(可再创建一张给别人),6:已失效)")
    private Integer status;
    @ApiModelProperty("创建时间")
    private Date createdAt;
    @ApiModelProperty("更新时间")
    private Date updatedAt;
    @ApiModelProperty("ID集合")
    private List<Integer> ids;
    @ApiModelProperty("子优惠券编号集合")
    private List<String> nos;
    /** 用户优惠券集合 */
    private List<UserCoupon> userCoupons;

    /**
     * 以上由工具自动生成，以下为手动添加
     */

    /**
     * Empty constructor
     */
    public UserCoupon() {

    }

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    /**
     * 获取 子优惠券编号
     */
    @Override
    public String getNo() {
        return no;
    }

    /**
     * 设置 子优惠券编号
     */
    @Override
    public void setNo(String no) {
        this.no = no;
    }

    /**
     * 获取 批次编号
     */
    public String getBatchNo() {
        return batchNo;
    }

    /**
     * 设置 批次编号
     */
    public void setBatchNo(String batchNo) {
        this.batchNo = batchNo;
    }

    /**
     * 获取 领取活动编号
     */
    public String getActivityNo() {
        return activityNo;
    }

    /**
     * 设置 领取活动编号
     */
    public void setActivityNo(String activityNo) {
        this.activityNo = activityNo;
    }

    /**
     * 获取 所属优惠券编号
     */
    public String getCouponNo() {
        return couponNo;
    }

    /**
     * 设置 所属优惠券编号
     */
    public void setCouponNo(String couponNo) {
        this.couponNo = couponNo;
    }

    /**
     * 获取 所属用户编号
     */
    public String getUserNo() {
        return userNo;
    }

    /**
     * 设置 所属用户编号
     */
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }

    /**
     * 获取 使用模块编号
     */
    public String getModuleNo() {
        return moduleNo;
    }

    /**
     * 设置 使用模块编号
     */
    public void setModuleNo(String moduleNo) {
        this.moduleNo = moduleNo;
    }

    /**
     * 获取 使用店铺编号
     */
    public String getStoreNo() {
        return storeNo;
    }

    /**
     * 设置 使用店铺编号
     */
    public void setStoreNo(String storeNo) {
        this.storeNo = storeNo;
    }

    /**
     * 获取 使用商品编号
     */
    public String getGoodsNo() {
        return goodsNo;
    }

    /**
     * 设置 使用商品编号
     */
    public void setGoodsNo(String goodsNo) {
        this.goodsNo = goodsNo;
    }

    /**
     * 获取 兑换时间(领取时间)
     */
    public Date getGetDate() {
        return getDate;
    }

    /**
     * 设置 兑换时间(领取时间)
     */
    public void setGetDate(Date getDate) {
        this.getDate = getDate;
    }

    /**
     * 获取 优惠金额
     */
    public BigDecimal getTotal() {
        return total;
    }

    /**
     * 设置 优惠金额
     */
    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    /**
     * 获取 使用时间
     */
    public Date getUseDate() {
        return useDate;
    }

    /**
     * 设置 使用时间
     */
    public void setUseDate(Date useDate) {
        this.useDate = useDate;
    }

    /**
     * 获取 状态(1:未兑换(在优惠券池中未领取),2:未使用,3:已使用,4:已冻结(不能使用,可解冻),5:已收回(可再创建一张给别人),6:已失效)
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置 状态(1:未兑换(在优惠券池中未领取),2:未使用,3:已使用,4:已冻结(不能使用,可解冻),5:已收回(可再创建一张给别人),6:已失效)
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获取 创建时间
     */
    public Date getCreatedAt() {
        return createdAt;
    }

    /**
     * 设置 创建时间
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * 获取 更新时间
     */
    public Date getUpdatedAt() {
        return updatedAt;
    }

    /**
     * 设置 更新时间
     */
    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    /**
     * 获取 ID集合
     */
    public List<Integer> getIds() {
        return ids;
    }

    /**
     * 设置 ID集合
     */
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    /**
     * 获取 子优惠券编号集合
     */
    public List<String> getNos() {
        return nos;
    }

    /**
     * 设置 子优惠券编号集合
     */
    public void setNos(List<String> nos) {
        this.nos = nos;
    }

    /**
     * 获取 用户优惠券集合
     */
    public List<UserCoupon> getUserCoupons() {
        return userCoupons;
    }

    /**
     * 设置 用户优惠券集合
     */
    public void setUserCoupons(List<UserCoupon> userCoupons) {
        this.userCoupons = userCoupons;
    }

    /**
     * 以上由工具自动生成，以下为手动添加
     */

    /**
     * 插入初始化
     * 
     * @param coupon 
     * @param date 
     */
    public void insertInit(Coupon coupon, Date date) {
        setNo(GUIDUtil.generateGuid());
        setCouponNo(coupon.getNo());
        setBatchNo(coupon.getBatchNo());
        setStatus(ECouponStatus.YES_LAUNCH.getCode());
        setGetDate(date);
        setCreatedAt(date);
        setUpdatedAt(date);
    }

    /**
     * 更新初始化
     */
    public void updateInit() {
        Date now = DateUtil.nowDate();
        setUpdatedAt(now);
    }

}